﻿/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#ifndef __6C8203E4_5139_4499_89C3_E8C562A7AE68__
#define __6C8203E4_5139_4499_89C3_E8C562A7AE68__

#include "../tools/head.h"

/////////////////////////////////////////////////////////////////////////////////////////
// 

namespace xos_aio
{
    class aio_epoll_notify;
    class aio_thread;

    // 
    // aio_impl
    // 
    class aio_impl : public xos_stl::mem_item< xos::release_impl< aio_impl >, thread_lock >,
		public i_aio
    {
    public:
        typedef xos::release_impl< aio_impl > T;

    public:
        /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //

        static int get_addr( POOL *** pppPool, LIST *** pppList );

    public:
        aio_impl();
        ~aio_impl();

    public:
        // 
        // epoll notify.
        // 
        aio_epoll_notify * m_pEpollNotify;

        aio_data::LIST m_request_list;
        aio_data::LIST m_return_list;

        // 
        // parameters
        // 
        xos::f_runnable m_pCallback;
        aio_thread * m_pAioThread;

        int m_hKqueue;

    public:
        int notify( xos_box::i_msg *& p );
        int init();
        int term();

    public:
        // 
        // set callback. 
        // 
        int set_callback( xos::f_runnable pCallback );
        // 
        // aio request
        // 
        // m_nData[0] : enumAioType
        // 
        int post_request( xos_box::i_msg *& pMsg );
    };
} // xos_aio

#endif // __6C8203E4_5139_4499_89C3_E8C562A7AE68__
